# coding:utf8
import findspark

findspark.init()
from pyspark.sql import SparkSession
from pyspark.sql.types import StructType, StringType, IntegerType

if __name__ == '__main__':
    # 0. 构建执行环境入口对象SparkSession
    spark = SparkSession.builder. \
        appName("test"). \
        master("local[*]"). \
        config("spark.sql.shuffle.partitions", "4"). \
        getOrCreate()
    sc = spark.sparkContext
    # 创建DF , 首先创建RDD 将RDD转DF
    rdd = sc.textFile("hdfs://bigdata:9820/pySpark_input/stu_score.txt"). \
        map(lambda x: x.split(',')). \
        map(lambda x: (int(x[0]), x[1], int(x[2])))
    # StructType 类
    # 这个类 可以定义整个DataFrame中的Schema
    schema = StructType(). \
        add("id", IntegerType(), nullable=False). \
        add("name", StringType(), nullable=True). \
        add("score", IntegerType(), nullable=False)
    # 一个add方法 定义一个列的信息, 如果有3个列, 就写三个add
    # add方法: 参数1: 列名称, 参数2: 列类型, 参数3: 是否允许为空
    df = spark.createDataFrame(rdd, schema)
    df.printSchema
    df.show()
